package com.netqin.netconnection;

import com.netqin.cache.DataCache;

import android.os.Handler;
import android.os.Message;

/**
 * Class description
 * 支持多个任务的排队下载，一个任务完成后，进入下一个任务的下载
 *
 * @author MingLi
 * @since 2011-11-10
 */

public interface FileDownloadMgr {
    
    //针对下载队列的接口
    /**
     * 
     * @param url 待下载文件的url
     * @param handler 调用者线程相关的handler(用于返回参数用)
     * @param progress 3.6新增支持进度消息发送的开关
     * 
     * @return 注意：当url为null或长度为0时，返回值为null,表明任务没有添加成功
     * 当msg为null，或者handler为null时，下载完毕将不发送消息通知.
     * 3.6版本增加下载进度消息：将通过handler，发送进度数据到其消息队列，进入采用如下Progress对象描述
     */
    public FileDownloadTask addFileDownloadTask(String url, Message msg, Handler handler, boolean progress);
    /**
     * 
     * @param url 待下载文件的url
     * @param handler 调用者线程相关的handler(用于返回参数用)
     * 
     * @return 注意：当url为null或长度为0时，返回值为null,表明任务没有添加成功
     * 当msg为null，或者handler为null时，下载完毕将不发送消息通知.
     */
    public FileDownloadTask addFileDownloadTask(String url,Message msg, Handler handler);
    /**
     * 
     * 开始下载
     */
    public void  start();
    
    /**
     * 停止整个下载队列
     */
    public void  stop();
    
    /**
     * 
     * 暂停整个下载队列
     */
    public void  pause();
    
    /**
     * 
     * 继续下载
     */
    public void  resume();      
  
    
    /**
     * 
     * 开始一个下载任务
     */
    public void  start(FileDownloadTask t);
    
    /**
     * 停止当前任务，将从下载任务队列中清除
     * 如果已经处于下载状态，将不可清除
     */
    public void  stop(FileDownloadTask t);  
    
    /**
     * 
     * 暂停当前下载任务
     */
    public void  pause(FileDownloadTask t);  
    
    /**
     * 
     * 重新启动当前下载任务
     */
    public void  resume(FileDownloadTask t);
    
    /**
     * 获取与下载任务相关的缓存
     * @return 如果没有设置，将创建一个缓存，始终不为空
     */
    public DataCache getDataCache();
    
    /**
     * 设置下载使用的缓存
     * 1.每次下载前将检查缓存，确定是否需要下载
     * 2.获取下载任务相关本地文件属性时，将使用该缓存
     * @param dataCache
     */
    public void setDataCache(DataCache dataCache);
}
